SPDX-FileCopyrightText: 2016 Quincy Jones Deldaele SPDX-FileCopyrightText: 2024 AlICe laboratory https://alicelab.be
SPDX-License-Identifier: GPL-3.0-or-later
Script jury final 19/01/16 Ecrit sous blender hash e8299c8 - windows 10
import bpy
import random
import math
from math import *
bpy.ops.object.select_all(action="SELECT")
bpy.ops.object.delete(use_global=False)definition poutre
def poutre(position, dimension, nom):
bpy.ops.mesh.primitive_cube_add(radius=0.5, location=position)
bpy.ops.transform.resize(value=dimension)
bpy.context.object.name = nom
print("pos=", position, "dim=", dimension, "nom=", nom)
l_colonne = []Mise en place mur Poutre / Colonne (gauche)
def colonne(position, dimension, nom):
if len(l_colonne) == 0:
bpy.ops.mesh.primitive_cube_add(
radius=0.5,
location=(position[0], position[1], position[2] + dimension[2] / 2),
)
bpy.ops.transform.resize(value=dimension)
bpy.context.object.name = nomprint(‘pos=’,position,’dim=’,dimension,’nom=’,nom)
l_colonne.append(dimension[2])
else:
precedent = l_colonne[-1]
suivante = dimension[2]
hauteur = max([precedent, suivante])
bpy.ops.mesh.primitive_cube_add(
radius=0.5, location=(position[0], position[1], position[2] + hauteur / 2)
)
bpy.ops.transform.resize(value=(dimension[0], dimension[1], hauteur))
bpy.context.object.name = nomprint(‘pos=’,position,’dim=’,dimension,’nom=’,nom)
l_colonne.append(dimension[2])
nbCelY = random.randint(2, 10)
length_y_right = 0
for y in range(0, nbCelY):
nbCelZ = random.randint(3, 11)
if y == nbCelY - 1:
HtLastCol = nbCelZ * 83
colonne((0, 0 + y * 226 - 18.5, 0), (10, 10, nbCelZ * 83), "colonne")
length_y_right += 0 + y * 226 - 18.5
for z in range(0, nbCelZ):
poutre((0, y * 226 + 94.5, z * 83 + 83), (10, 216, 10), "poutre")
print(l_colonne)
l_trame = []
for i in range(0, len(l_colonne)):
l = []
for y in range(i * 216, (i + 1) * 216):
for z in range(1, l_colonne[i] + 1):
if z % 83 == 0 and y % 27 == 0:
l.append((0, y, z))
l_trame.append(l)
print(l_trame[0])
y = len(l_colonne)
colonne((0, 0 + y * 226 - 18.5, 0), (10, 10, HtLastCol), "colonne")Trame de droite poutre et collone ( décaler de 300 en X)
l_colonne = []
for y in range(0, nbCelY):
nbCelZ = random.randint(3, 11)
if y == nbCelY - 1:
HtLastCol = nbCelZ * 83
colonne((300, 0 + y * 226 - 18.5, 0), (10, 10, nbCelZ * 83), "colonne")
for z in range(0, nbCelZ):
poutre((300, y * 226 + 94.5, z * 83 + 83), (10, 216, 10), "poutre")
l_trame_droite = []
for i in range(0, len(l_colonne)):
l = []
for y in range(i * 216, (i + 1) * 216):
for z in range(1, l_colonne[i] + 1):
if z % 83 == 0 and y % 27 == 0:
l.append((0, y, z))
l_trame_droite.append(l)
y = len(l_colonne)
colonne((300, 0 + y * 226 - 18.5, 0), (10, 10, HtLastCol), "colonne")modules / fonction copyPaste des différents module
def CopyPaste(name, newname):
bpy.context.scene.objects.active = bpy.data.objects[name]
obj = bpy.context.active_object
Copy = bpy.data.objects.new(newname, obj.data)
bpy.context.scene.objects.link(Copy)
return Copy
l_module = []
l_module_simple = [
"module simple A",
"module simple B",
"module simple C",
"module simple D",
"module simple E",
"module simple F",
"module simple G",
"module simple H",
"module simple I",
]
l_module_double = [
"module double B",
"module double C",
"module double D",
"module double E",
"module double F",
"module double H",
]
l_module_base = [
"module base A",
"module base B",
"module base C",
"module base bas",
"module base haut",
]
l_type_module = ["vide", "simple", "double"]boucle de modules par travé (Gauche)
l_type_module_gauche = []
for index in range(len(l_trame)):
if index == 0:
shift1 = 0
else:
shifl1 = 13.5
shift = shift1 + 10 * index
l_module_trame = []
for coordonnees in l_trame[index]:
moduleChoisi = random.choice(l_type_module)
print("ce module sera", moduleChoisi)
if moduleChoisi == "vide":
print("rien")
if moduleChoisi == "simple":
moduleSimpleChoisi = random.choice(l_module_simple)
l_module_trame.append(moduleChoisi)
l_module.append(CopyPaste(moduleSimpleChoisi, "ModuleSimple"))
x, y, z = coordonnees
l_module[-1].location = [x, y + shift, z]
l_module[-1].scale = [1, 1, 1]
l_module[-1].rotation_euler = [radians(0), radians(0), radians(180)]
if moduleChoisi == "double":
moduleDoubleChoisi = random.choice(l_module_double)
l_module_trame.append(moduleChoisi)
l_module.append(CopyPaste(moduleDoubleChoisi, "ModuleDouble"))
x, y, z = coordonnees
l_module[-1].location = [x, y + shift, z]
l_module[-1].scale = [1, 1, 1]
l_module[-1].rotation_euler = [radians(0), radians(0), radians(180)]
print(len("ModuleDouble"))
l_type_module_gauche.append(l_module_trame)boucle de modules par travé (Droite)
l_type_module_droit = []
for index in range(len(l_trame_droite)):
if index == 0:
shift1 = 0
else:
shifl1 = 13.5
shift = shift1 + 10 * index
l_module_trame = []
for coordonnees in l_trame_droite[index]:
moduleChoisi = random.choice(l_type_module)
print("ce module sera", moduleChoisi)
if moduleChoisi == "vide":
print("rien")
if moduleChoisi == "simple":
moduleSimpleChoisi = random.choice(l_module_simple)
l_module_trame.append(moduleChoisi)
l_module.append(CopyPaste(moduleSimpleChoisi, "ModuleSimple"))
x, y, z = coordonnees
l_module[-1].location = [x + 300, y + shift, z]
l_module[-1].scale = [1, 1, 1]
l_module[-1].rotation_euler = [radians(0), radians(0), radians(0)]
if moduleChoisi == "double":
moduleDoubleChoisi = random.choice(l_module_double)
l_module_trame.append(moduleChoisi)
l_module.append(CopyPaste(moduleDoubleChoisi, "ModuleDouble"))
x, y, z = coordonnees
l_module[-1].location = [x + 300, y + shift, z]
l_module[-1].scale = [1, 1, 1]
l_module[-1].rotation_euler = [radians(0), radians(0), radians(0)]
l_type_module_droit.append(l_module_trame)print le nombre total de modules et de personnes par configuration
perso_par_module = 15
print(l_type_module_gauche)
nbr_totale_module = 0
nbr_total_perso = 0
for trame in l_type_module_gauche:
numero_trame = l_type_module_gauche.index(trame)
nbr_module_simple = trame.count("simple")
nbr_module_double = trame.count("double")
print(
"dans la trame gauche ",
numero_trame,
" il y a ",
nbr_module_simple,
" modules simple",
)
print(
"dans la trame gauche ",
numero_trame,
" il y a ",
nbr_module_double,
" modules double",
)
nbr_totale_module = nbr_totale_module + nbr_module_simple + nbr_module_double
nbr_total_perso = (
nbr_total_perso
+ nbr_module_simple * perso_par_module
+ nbr_module_double * 2 * perso_par_module
)
for trame in l_type_module_droit:
numero_trame = l_type_module_droit.index(trame)
nbr_module_simple = trame.count("simple")
nbr_module_double = trame.count("double")
print(
"dans la trame droite ",
numero_trame,
" il y a ",
nbr_module_simple,
" modules simple",
)
print(
"dans la trame droite ",
numero_trame,
" il y a ",
nbr_module_double,
" modules double",
)
nbr_totale_module = nbr_totale_module + nbr_module_simple + nbr_module_double
nbr_total_perso = (
nbr_total_perso
+ nbr_module_simple * perso_par_module
+ nbr_module_double * 2 * perso_par_module
)
print("nombre totale de modules =", nbr_totale_module)
print("nombre totale de personnes =", nbr_total_perso)